package com.enen.exception;

import com.enen.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.rmi.MarshalException;

/**
 * 全局异常处理
 * */
@Slf4j
@RestControllerAdvice // 声明这是一个全局异常处理类。
public class GlobalExceptionHandler {
    // 指定该方法处理所有类型的异常。当控制器方法抛出 Exception 类型的异常时，会自动调用 handleException 方法。
    @ExceptionHandler
    public Result handleException(Exception e){
        log.error("程序出错啦~",e);
        return Result.error("出错啦，请联系管理员");
    }
    // 处理出现 DuplicateKeyException异常，如果出现唯一约束就会触发这个异常，比如手机号，用户名已存在
    @ExceptionHandler
    public Result handleDuplicateKeyException(DuplicateKeyException e){
        log.error("程序出错啦~",e);
        // 先获取错的日志信息
        String message = e.getMessage();
        // 获取Duplicate entry的索引位置
        int i = message.indexOf("Duplicate entry");
        // 根据索引位置截取Duplicate entry后的所有信息
        String errMsg = message.substring(i);
        // 再按照空格分割存入数组中
        String[] arr =errMsg.split(" ");
        return Result.error(arr[2]+"已存在");
    }
}
